"""
宿舍内务计算
宿舍内务根据难度分为几个等级，每完成一项任务就可以累计对应等级的分数。等级和分数对应关系如下：
1级：擦桌子、椅子、窗户 - 对应1分
2级：扫地、拖地 - 对应2分
3级：扫厕所 - 对应3分
4级：帮全宿舍打饭 - 对应4分
5级：帮全宿舍签到 - 对应5分

编写一个Python程序，先读取“宿舍老大的内务记录.txt”文件，获取所有已填写的信息（字典格式），文件不存在则创建空字典用于记录
然后让用户输入自己完成的宿舍内务任务和完成次数。
将信息存储到字典中，以：{任务: 次数} 的格式存储，如果任务已经存在则累加次数，如果任务不存在则添加新的任务。
将任务记录更新到 “宿舍老大的内务记录.txt” 文件中，统计并显示用户总共完成每项任务的次数和总分。
程序结束

编程思路提示：
实现步骤：try方式读取文件 - eval转换为字典 - 接收用户输入 - 更新字典次数 - 计算分数 - str方式转换字典为字符串 - 保存到文件
使用with open来操作文件。
读取文件时，将字符串转换回字典，用 eval 函数。
写入文件前，将字典转换为字符串，用 str 函数。
任务和分数的对应字典用：
    task_scores = {'擦桌子': 1, '擦椅子': 1, '擦窗户': 1, '扫地': 2, '拖地': 2, '扫厕所': 3, '帮全宿舍打饭': 4, '帮全宿舍签到': 5}
"""


task_scores = {'擦桌子': 1, '擦椅子': 1, '擦窗户': 1, '扫地': 2, '拖地': 2, '扫厕所': 3, '帮全宿舍打饭': 4, '帮全宿舍签到': 5}

import os

# 任务和分数对应关系
task_scores = {'擦桌子': 1, '擦椅子': 1, '擦窗户': 1, '扫地': 2, '拖地': 2, '扫厕所': 3, '帮全宿舍打饭': 4,
               '帮全宿舍签到': 5}


def read_tasks(filename):
    if not os.path.exists(filename):
        return {}
    with open(filename, 'r', encoding='utf-8') as file:
        try:
            return eval(file.read())
        except SyntaxError:
            # 文件内容为空或格式不正确时返回空字典
            return {}


def write_tasks(filename, tasks):
    with open(filename, 'w', encoding='utf-8') as file:
        file.write(str(tasks))


def main():
    filename = "宿舍老大的内务记录.txt"
    task_records = read_tasks(filename)

    print("请输入你完成的宿舍内务任务和完成次数：")
    while True:
        task = input("任务 (输入'结束'以停止): ")
        if task == '结束':
            break
        if task not in task_scores:
            print("未知的任务，请重新输入。")
            continue

        try:
            count = int(input("次数: "))
        except ValueError:
            print("无效的次数，请输入数字。")
            continue

        if task in task_records:
            task_records[task] += count
        else:
            task_records[task] = count

    # 更新文件
    write_tasks(filename, task_records)

    # 统计并显示信息
    total_score = 0
    print("\n任务完成情况如下：")
    for task, count in task_records.items():
        score = task_scores.get(task, 0) * count
        total_score += score
        print(f"{task}: {count} 次, 总分: {score}")

    print(f"\n总计完成任务获得的分数为: {total_score}")


if __name__ == '__main__':
    main()
